﻿#pragma once
#include "ADFGlobal.h"
#include "AsJsonObject.h"
#include "AsPluginTableModelRow.h"

/**
 * 算法执行器
 */
class ADF_EXPORT AsTestAlgorithmExecutor {
public:
	virtual ~AsTestAlgorithmExecutor();

public:
	/**
	 * @desc 默认的检测函数
	 */
	virtual int detectFn(const cv::Mat& input, AsJsonObject* pParamWrapper, AsPluginTableModelRow* pItem);
	/**
	 * @desc 检测前处理
	 */
	virtual void beforeDetect(const cv::Mat& input) = 0;
	/**
	 * @desc 检测后处理
	 */
	virtual void afterDetect(AsPluginTableModelRow* pItem) = 0;

};

/**
 * 2D算法执行器
 */
class ADF_EXPORT AsTestAlgorithmExecutor2D :public AsTestAlgorithmExecutor {
public:
	virtual ~AsTestAlgorithmExecutor2D();

protected:
	virtual void beforeDetect(const cv::Mat& input )override ;
	virtual void afterDetect(AsPluginTableModelRow* pItem)override;
	void addToDebugMat(const cv::Mat& mat);

	cv::Mat m_mat;
	cv::Mat m_colorMat;
	QVector<cv::Mat> m_vDebugMat;
};

